package org.jeecg.modules.api.xxApi.vo;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.jeecg.modules.api.xxApi.validate.EnumValue;
import org.jeecg.modules.xxgx.djgl.entity.cezs.Cezs;
import org.jeecg.modules.xxgx.djgl.entity.tdyw.*;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value="XxApiDjtsParam对象", description="销项管理-单据推送参数")
public class XxApiDjtsParam {


    @ApiModelProperty(value = "部门代码")
    private String bmdm ;

    /**
     *所属部门
     */
    @ApiModelProperty(value = "所属部门",hidden = true)
    private String sysOrgCode ;

    /**
     *租户编号
     */
    @ApiModelProperty(value = "租户编号",hidden = true)
    private Integer tenantId ;

    /**
     *企业主键
     */
    @ApiModelProperty(value = "企业主键",hidden = true)
    private String companyId ;

    /**
     *业务单据编号
     */
    @ApiModelProperty(value = "业务单据编号")
    @NotBlank(message = "业务单据编号不可为空")
    private String ywdjbh ;

    /**
     *客户代码
     */
    @ApiModelProperty(value = "客户代码")
    private String khdm ;

    /**
     *客户名称
     */
    @ApiModelProperty(value = "客户名称")
    @NotBlank(message = "客户名称不可为空")
    private String khmc ;

    /**
     *客户税号
     */
    @ApiModelProperty(value = "客户税号")
    private String khsh ;

    /**
     *客户地址
     */
    @ApiModelProperty(value = "客户地址")
    private String khdz ;

    /**
     *客户电话
     */
    @ApiModelProperty(value = "客户电话")
    private String khdh ;

    /**
     *客户开户银行
     */
    @ApiModelProperty(value = "客户开户银行")
    private String khyh ;

    /**
     *客户账号
     */
    @ApiModelProperty(value = "客户银行账号")
    private String khzh ;

    /**
     *发票类型
     */
    @ApiModelProperty(value = "发票类型代码004-专票 007-普票 025-卷票 026-电子票  028-电子专票 01-全电专 02-全电普")
    @NotBlank(message = "发票类型代码不可为空")
    @EnumValue(values = {"004","007","025","026","028","01","02"},message = "发票类型代码不合法")
    private String fplxdm ;

    /**
     *开票类型
     */
    @ApiModelProperty(value = "开票类型 0正数发票 1负数发票 3作废发票")
    @NotBlank(message = "开票类型不可为空")
    @EnumValue(values = {"0","1","3"},message = "开票类型不合法")
    private String kplx ;

    /**
     *金额
     */
    @ApiModelProperty(value = "金额")
    @NotNull(message = "金额不能为空")
    private BigDecimal je ;

    @ApiModelProperty(value = "合计金额",hidden = true)
    private BigDecimal hjje;
    @ApiModelProperty(value = "合计税额",hidden = true)
    private BigDecimal hjse;

    /**
     *折扣金额
     */
    @ApiModelProperty(value = "折扣金额（单据折扣或明细折扣只能选择一种）")
    private BigDecimal zkje ;

    /**
     *单据状态
     */
    @ApiModelProperty(value = "单据状态 0有效 1无效",hidden = true)
    private String djzt ;

    /**
     *开票状态
     */
    @ApiModelProperty(value = "开票状态 0未开票 1开票中 2开票失败 3已开票",hidden = true)
    private String kpzt ;

    /**
     *失败原因
     */
    @ApiModelProperty(value = "失败原因",hidden = true)
    private String sbyy ;

    /**
     *单据类型
     */
    @ApiModelProperty(value = "单据类型")
    @NotBlank(message = "单据类型不能为空")
    private String djlx ;

    /**
     *数据来源
     */
    @ApiModelProperty(value = "数据来源")
    @NotBlank(message = "数据来源不能为空")
    private String sjly ;

    /**
     *所属业态
     */
    @ApiModelProperty(value = "所属业态",hidden = true)
    private String sjyt ;

    /**
     *数据类型
     */
    @ApiModelProperty(value = "数据类型")
    @NotBlank(message = "数据类型不能为空")
    private String sjlx ;

    /**
     *处理方式
     */
    @ApiModelProperty(value = "处理方式",hidden = true)
    private String clfs ;

    /**
     *特殊票种
     */
    @ApiModelProperty(value = "特殊票种 00正常发票01农产品销售02农产品收购06抵扣通行费07其他通行费08成品油销售12机动车")
    @NotBlank(message = "特殊票种不能为空")
    @EnumValue(values = {"00","01","02","06","07","08","12"},message = "特殊票种不合法")
    private String tspz ;

    /**
     *征收方式
     */
    @ApiModelProperty(value = "征收方式 0普通征税1减按征税2差额开票3全额开票")
    @NotBlank(message = "征收方式不能为空")
    @EnumValue(values = {"0","1","2","3"},message = "征收方式不合法")
    private String zsfs ;

    /**
     *纸质发票标志
     */
    @ApiModelProperty(value = "纸质发票标志 0否 1是",hidden = true)
    private String zzfpbz ;

    /**
     *客户邮箱
     */
    @ApiModelProperty(value = "客户邮箱")
    private String khlxyx ;

    /**
     *客户手机
     */
    @ApiModelProperty(value = "客户手机")
    private String khlxfs ;

    /**
     *邮寄地址
     */
    @ApiModelProperty(value = "邮寄地址")
    private String yjdz ;

    /**
     *邮寄接收人
     */
    @ApiModelProperty(value = "邮寄接收人")
    private String yjjsr ;

    /**
     *公司代码
     */
    @ApiModelProperty(value = "公司代码")
    private String gsdm ;

    /**
     *销方名称
     */
    @ApiModelProperty(value = "销方名称",hidden = true)
    private String xfmc ;

    /**
     *销方税号
     */
    @ApiModelProperty(value = "销方税号",hidden = true)
    private String xfsh ;

    /**
     *用户代码
     */
    @ApiModelProperty(value = "用户代码",hidden = true)
    private String yhdm ;

    /**
     *开票人
     */
    @ApiModelProperty(value = "开票人")
    private String kpr ;

    /**
     *收款人
     */
    @ApiModelProperty(value = "收款人")
    private String skr ;

    /**
     *复核人
     */
    @ApiModelProperty(value = "复核人")
    private String fhr ;

    /**
     *备注
     */
    @ApiModelProperty(value = "备注")
    private String bz ;

    /**
     *含税标志
     */
    @ApiModelProperty(value = "含税标志 0不含税 1含税")
    @NotBlank(message = "含税标志不能为空")
    @EnumValue(values = {"0","1"},message = "含税标志不合法")
    private String hsbz ;

    /**
     *开票终端
     */
    @ApiModelProperty(value = "开票终端代码")
    @NotBlank(message = "开票终端代码不能为空")
    private String kpzddm ;

    /**
     *自动开票
     */
    @ApiModelProperty(value = "自动开票标志 0手工 1自动",hidden = true)
    private String zdkpbz ;

    /**
     *单据日期
     */
    @ApiModelProperty(value = "单据日期 yyyy-MM-dd",hidden = true)
    private String djrq ;

    /**
     *扩展1
     */
    @ApiModelProperty(value = "扩展字段1")
    private String kz1 ;

    /**
     *扩展2
     */
    @ApiModelProperty(value = "扩展字段2")
    private String kz2 ;

    /**
     *扩展3
     */
    @ApiModelProperty(value = "扩展字段3")
    private String kz3 ;

    /**
     *原单据编号
     */
    @ApiModelProperty(value = "原业务单据编号 开票类型为1、3时必传")
    private String ydjbh ;

    /**
     *原发票代码
     */
    @ApiModelProperty(value = "原发票代码 开票类型为1、3时必传")
    private String yfpdm ;

    /**
     *原发票号码
     */
    @ApiModelProperty(value = "原发票号码 开票类型为1、3时必传")
    private String yfphm ;

    /**
     *红冲原因
     */
    @ApiModelProperty(value = "红冲原因代码 01开票有误02销货退回03服务中止04销售折让 开票类型为1时必传")
    private String hcyy ;

    /**
     *特定要素类型代码
     */
    @ApiModelProperty(value = "特定业务代码 03建筑服务04货物运输05不动产销售06不动产租赁09旅客运输")
    private String tdyslxdm ;

    /**
     *扣除额
     */
    @ApiModelProperty(value = "扣除额")
    private BigDecimal kce ;

    /**
     *纸质发票代码
     */
    @ApiModelProperty(value = "纸质发票代码（数电纸票）",hidden = true)
    private String zzfpdm ;

    /**
     *购方自然人标识
     */
    @ApiModelProperty(value = "购方自然人标识 N否 Y是")
    private String gfzrrbs ;

    /**
     *纸质发票号码
     */
    @ApiModelProperty(value = "纸质发票号码（数电纸票）",hidden = true)
    private String zzfphm ;

    /**
     *是否展示销方银行账号到备注里面
     */
    @ApiModelProperty(value = "是否展示销方银行账号到备注里面 N否 Y是")
    private String sfzsxsfyhzh ;

    /**
     *是否展示购方银行 账号到备注里面
     */
    @ApiModelProperty(value = "是否展示购方银行账号到备注里面 N否 Y是")
    private String sfzsgmfyhzh ;

    /**
     *纸票票种代码
     */
    @ApiModelProperty(value = "纸质票种代码（数电纸票）",hidden = true)
    private String zpfppzdm ;

    @Valid
    @ApiModelProperty(value = "明细数据")
    @NotEmpty(message = "明细数据不能为空")
    List<XxApiDjtsMxParam> items;

    @ApiModelProperty(value = "差额征收数据明细")
    List<Cezs> cezsList;

    @ApiModelProperty(value = "货物运输服务")
    private List<Hwysfwmx> hwysfw;

    @ApiModelProperty(value = "建筑服务")
    private Jzfw jzfw;

    @ApiModelProperty(value = "不动产销售服务")
    private Bdcxsfw bdcxsfw;

    @ApiModelProperty(value = "不动产经营租赁服务")
    private Bdcjyzlfw bdcjyzlfw;

    @ApiModelProperty(value = "旅客运输服务")
    private List<Lkysfwmx> lkysfwmx;

    @ApiModelProperty(value = "附加要素明细")
    private List<XxApiDjtsjFjysMxParam> fjyslist;
}
